const multer = require('../utils/multer');
const mkdirp = require("mkdirp");
const path = require('path');
const fsPromise = require('fs').promises;
const fs = require('fs');

// 图片上传
exports.uploadImg = (req, res) => {
	// const upload = multer.single('image'); // 上传单个文件,single中的参数是上传文件的key值
	// upload(req, res, (err) => {
	// 	console.log(req.file)
	// 	console.log(req.body.fileName)
	// 	if (err) {
	// 		// 处理上传过程中发生的任何错误
	// 		console.error(err)
	// 		return res.sendRes(null, 500, '上传失败');
	// 	}
	//
	// 	// 检查文件是否存在
	// 	if (!req.file) {
	// 		return res.sendRes(null, 400, '请选择文件');
	// 	}
	//
	// 	// 文件已经上传成功，你可以在这里执行后续操作
	// 	res.sendRes({file: req.file}, 200, '上传成功');
	// });
	// 将图片从base64转为buffer
	const base64Data = req.body.file.replace(/^data:image\/\w+;base64,/, '');
	const dataBuffer = Buffer.from(base64Data, 'base64');
	// 从req.body.fileName解析出目录路径，拼接上传基础路径和解析出的目录路径
	const directoryPath = path.dirname(req.body.fileName);
	const uploadPath = path.join(__dirname, '..', 'uploads', directoryPath);
	const made = mkdirp.sync(uploadPath)
	console.log(`made directories, starting with ${made}`)
	// 使用fileName作为文件名
	const fileName = path.basename(req.body.fileName);
	// 写入文件
	fs.writeFile(path.join(uploadPath, fileName), dataBuffer, (err) => {
		if (err) {
			console.error(err)
			return res.sendRes(null, 500, '上传失败');
		}
		res.sendRes({file: process.env.BASE_URL + '/uploads/' + req.body.fileName}, 200, '上传成功');
	})
}

// 批量删除图片
exports.deleteImg = async (req, res) => {
	const {imgs} = req.body;
	const files = JSON.parse(imgs);
	const promises = files.map(async file => {
		try {
			// 从URL中提取文件路径
			const filePath = path.join(__dirname, '..', file.replace(process.env.BASE_URL, '').replace('/', path.sep));
			await fsPromise.unlink(filePath);
		} catch (err) {
			console.error(`Error deleting file: ${file}`, err);
			// 这里可以选择抛出错误或返回错误消息，但不要发送响应，因为响应应该在所有操作后发送一次
		}
	});

	try {
		// 等待所有删除操作完成
		await Promise.all(promises);
		res.sendRes(null, 200, '删除成功');
	} catch (error) {
		// 如果有任何删除操作失败，将发送一个错误响应
		res.sendRes(null, 500, '删除失败');
	}
}
